package disenioPantallas.listarAnimales;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractAction;
import javax.swing.BoxLayout;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.SwingConstants;
import java.awt.Component;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;

import javax.swing.Box;

import disenioPantallas.elementos.EButton;
import disenioPantallas.elementos.EComboBox;
import disenioPantallas.elementos.ELabel;
import disenioPantallas.elementos.EPanel;
import disenioPantallas.elementos.dialogGeneral;

import entidades.Animal;
import entidades.Campo;
import entidades.Potrero;
import gestores.GestorAnimal;
import gestores.GestorCampo;
import gestores.GestorErrores;
import gestores.GestorSistema;


public class DTrasladar extends dialogGeneral {

	private Vector<Integer> idAnimales;

	private Vector<Campo> camposEncontrados= new Vector<Campo>();

	private Vector<String> nombreCampos= new Vector<String>();

	private Vector<String> nombrePotreros= new Vector<String>();
	
	private GestorSistema gSistema=GestorSistema.getGestorSistema();
	private GestorErrores gError=GestorErrores.getGestorErrores();
	private GestorAnimal gAnimal=GestorAnimal.getGestorAnimal();
	
	private static final long serialVersionUID = 1L;
	private EComboBox cbCampoDestino;
	private EComboBox cbPotreroDestino;

	private JSpinner spinner;

	private GestorCampo gCampo=GestorCampo.getGestorCampo();

	public static void main(String[] args) {
		try {
			DTrasladar dialog = new DTrasladar();
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public DTrasladar() {
		
		setTitle("Trasladar");
		setMinimumSize(new Dimension(450, 230));
		getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
		
		JPanel panelTitulo = new EPanel();
		panelTitulo.setOpaque(false);

		
		getContentPane().add(panelTitulo);
		panelTitulo.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
		
		JLabel lblSeleccioneElAnimal = new ELabel("Animales: #99");
		lblSeleccioneElAnimal.setHorizontalAlignment(SwingConstants.CENTER);
		panelTitulo.add(lblSeleccioneElAnimal);
		
		lblSeleccioneElAnimal.setFont(new Font("Cambria", Font.PLAIN, 18));
		
		JPanel panel = new EPanel();
		getContentPane().add(panel);
		
		ELabel lbFecha = new ELabel("Fecha:");
		lbFecha.setPreferredSize(new Dimension(80, 40));
		lbFecha.setHorizontalAlignment(SwingConstants.LEFT);
		panel.add(lbFecha);
		
		spinner = new JSpinner();
		spinner.setFont(new Font("Cambria", Font.PLAIN, 16));
		spinner.setModel(new SpinnerDateModel(new Date(1357268400000L), new Date(-2208973392000L), null, Calendar.DAY_OF_YEAR));
		spinner.setPreferredSize(new Dimension(150, 35));
		spinner.setValue(new Date());
		panel.add(spinner);

		
		Component horizontalStrut = Box.createHorizontalStrut(140);
		horizontalStrut.setPreferredSize(new Dimension(140, 0));
		horizontalStrut.setMinimumSize(new Dimension(140, 0));
		panel.add(horizontalStrut);
		
		JPanel panelTrasladar = new JPanel();
		panelTrasladar.setOpaque(false);
		getContentPane().add(panelTrasladar);
		
		panelTrasladar.setLayout(new BoxLayout(panelTrasladar, BoxLayout.Y_AXIS));
		
		JPanel panelDestino = new EPanel();
		panelDestino.setPreferredSize(new Dimension(450, 45));
		panelDestino.setMaximumSize(new Dimension(450, 45));
		panelTrasladar.add(panelDestino);
		
		JLabel lblDestino = new ELabel("Destino: ");
		lblDestino.setPreferredSize(new Dimension(80, 40));
		lblDestino.setHorizontalAlignment(SwingConstants.LEFT);
		panelDestino.add(lblDestino);
		
		cbCampoDestino = new EComboBox();
		panelDestino.add(cbCampoDestino);
		cbCampoDestino.addActionListener(new cbCampoAction());
		
		cbPotreroDestino = new EComboBox();
		panelDestino.add(cbPotreroDestino);
		
		Component verticalGlue = Box.createVerticalGlue();
		panelTrasladar.add(verticalGlue);
		
		JPanel panelCancelar = new EPanel();
		getContentPane().add(panelCancelar);
		
		JButton btnAceptar = new EButton("Aceptar");
		panelCancelar.add(btnAceptar);
		btnAceptar.addActionListener(new aceptarAction());
		
		JButton btnCancelar = new EButton("Cancelar");
		panelCancelar.add(btnCancelar);
		btnCancelar.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				cerrarDialog();
			}
		});
		
	
        
		try {
			camposEncontrados= gCampo.getCamposEncontrados();
			
			for(int i=0;i<camposEncontrados.size();i++){
				nombreCampos.add(camposEncontrados.get(i).getNombreCampo());
			}
			
			if(camposEncontrados.size()>0){
				Campo c=camposEncontrados.get(0);
			
				
				for(int i=0;i<c.getPotreros().size();i++){
					nombrePotreros.add(c.getPotreros().get(i).getNombrePotrero());
					
					}
				}
	
			cbCampoDestino.setModel(new DefaultComboBoxModel<>(nombreCampos));
			cbPotreroDestino.setModel(new DefaultComboBoxModel<>(nombrePotreros));
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			gError.mostrarCartelError(e.getMessage());
			e.printStackTrace();
		}	
		
		

	}
	
	private class aceptarAction extends AbstractAction{

		
		private static final long serialVersionUID = 1L;
		private String spotrero;
		private String scampo;
		private Potrero potrero;

		public void actionPerformed(ActionEvent arg0) {
			spotrero=(String) cbPotreroDestino.getSelectedItem();
			scampo=(String) cbCampoDestino.getSelectedItem();
			
			int i=0;
			while(potrero==null && i<camposEncontrados.size()){
				if(camposEncontrados.get(i).getNombreCampo().equals(scampo)){
					int j=0;
					while(j<camposEncontrados.get(i).getPotreros().size()){
						if(camposEncontrados.get(i).getPotreros().get(j).getNombrePotrero().equals(spotrero))
							potrero=camposEncontrados.get(i).getPotreros().get(j);
						j++;
					}
				}
				i++;
			}
			
			try {
				
				gAnimal.registrarTraslado(potrero.getCampoPerteneciente().getIdCampo(),potrero.getIdPotrero(),getIdAnimales(), (Date) spinner.getValue());
				gError.mostrarCartelAdvertencia("Se ha hecho el traslado correctamente");
				cerrarDialog();

			} catch (Throwable e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				gError.mostrarCartelError(e.getMessage());
			}


			
		}
		
	}
	
	private class cbCampoAction extends AbstractAction{

		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;

		@Override
		public void actionPerformed(ActionEvent arg0) {
			String campo=(String) cbCampoDestino.getSelectedItem();
			Campo c=null;
			 
			for(int i=0;i<camposEncontrados.size();i++){
				if(camposEncontrados.get(i).getNombreCampo().equals(campo))
					c=camposEncontrados.get(i);
			}
			
			nombrePotreros= new Vector<String>();
			if(c!=null){
				for(int i=0;i<c.getPotreros().size();i++){
					nombrePotreros.add(c.getPotreros().get(i).getNombrePotrero());
					
					}
				cbPotreroDestino.setModel(new DefaultComboBoxModel<String>(nombrePotreros));
			}
			cbPotreroDestino.setSelectedIndex(0);
		

		}
		
	}
	
	

	public Vector<Integer> getIdAnimales() {
		return idAnimales;
	}

	public void setIdAnimales(Vector<Integer> idAnimales) {
		this.idAnimales = idAnimales;
	}
}